package study02;

public class TestDemo {
    public static void specialHandle(Father f){
        if(f instanceof Son){  // instanceof 是对引用数据类型做类型判断的。   看你f到底属于什么类型
            ((Son) f).smoke();
            return;
        }
        if(f instanceof Daughter){
            ((Daughter) f).makeUp();
            return;
        }
    }
    public static void showWork(Father f){
        f.work();
    }
    public static void main(String[] args) {
        Son s1 = new Son();
        s1.work();

        Daughter d1 = new Daughter();
        d1.work();

        System.out.println("---------------");
        Father s2 = new Son();    // 向上转型，默认的。  对象可以拿到子父类共有的方法。
        Son s3 = (Son) s2;        // 如果要拿到子类特有的方法，必须新创建一个对象，将原有的对象强转为子类类型。
        s3.smoke();

        Father d2 = new Daughter();
        Daughter d3 = (Daughter) d2;
        d3.makeUp();

        System.out.println("----------------");
        showWork(s1);
        showWork(d1);

        System.out.println("----------------");
        specialHandle(s1);
        specialHandle(d1);

    }
}
